#include <stdio.h>
#include <string.h>

#define MAX_LEVELS 100
#define MAX_CHARS  100

int main() {
    char src[1000], tar[1000];  // 用于存储源字符串和目标字符串
    char levels[MAX_LEVELS][MAX_CHARS]; // 用于存储多层结构
    int levelsSize = 0; // 当前层的数量
    char buffer[MAX_CHARS]; // 临时存储当前层的字符集
    int bufferIndex = 0;  // 缓冲区索引
    int isOpen = 0;   // 标记是否在[]内

    // step 1# 输入src和tar字符串
    fgets(src, sizeof(src), stdin);  // 获取源字符串
    fgets(tar, sizeof(tar), stdin);  // 获取目标字符串

    // step 2# 去掉换行符
    src[strcspn(src, "\n")] = '\0';  // 去除src字符串中的换行符
    tar[strcspn(tar, "\n")] = '\0';  // 去除tar字符串中的换行符

    // step 3# 将tar字符串转化为多层结构levels
    for (int i = 0; i < strlen(tar); i++) {
        char c = tar[i];
        if (c == '[') {
            isOpen = 1; // 进入[]内
            bufferIndex = 0; // 重置缓冲区索引
        } else if (c == ']') {
            isOpen = 0; // 退出[]内
            buffer[bufferIndex] = '\0';  // 结束当前层的字符
            strcpy(levels[levelsSize++], buffer); // 将当前层加入levels
        } else {
            if (isOpen) {
                buffer[bufferIndex++] = c; // 在[]内，添加字符到当前层
            } else {
                buffer[0] = c;
                buffer[1] = '\0';  // 当前字符作为一层
                strcpy(levels[levelsSize++], buffer); // 在[]外，字符单独作为一层
            }
        }
    }

    // step 4# 滑动窗口匹配
    int srcLen = strlen(src);  // 获取源字符串长度
    int result = -1; // 初始化结果为-1（未找到）
    for (int i = 0; i <= srcLen - levelsSize; i++) {
        int isFind = 1; // 标记是否找到匹配

        // step 5# 匹配levels中的每一层
        for (int j = 0; j < levelsSize; j++) {
            if (strchr(levels[j], src[i + j]) == NULL) {
                isFind = 0; // 如果不匹配，标记为未找到
                break;
            }
        }

        if (isFind) {
            result = i; // 找到匹配，记录起始索引
            break;
        }
    }

    // step 6# 输出结果
    printf("%d\n", result); // 输出匹配的起始位置

    return 0;
}
